const typeDate = 'YYYY-MM-DD'; //默认的日期格式
const typeDateTime = 'YYYY-MM-DD HH:mm:ss'; //默认的日期时间格式

/**
 * 日期工具类
 */
export default {
  /**
   * 获取几天后的日期
   * @param days 后延的天数,如果为0就今天,如果为负数,就是几天前,如果为正数就是几天后
   * @param needFormat 是否需要格式化
   * @param formatType 格式化类型。默认值：见typeDate。
   */
  getDay({days = 0, needFormat = false, formatType = typeDate}) {
    let targetDay = new Date(Date.now() + 1000 * 60 * 60 * 24 * days);
    if (needFormat) {
      return this.format(targetDay, formatType);
    } else {
      return targetDay;
    }
  },
  /**
   * 将字符串转日期
   * @param dateString 日期字符串
   * @param formatType 格式化类型。默认值：见typeDateTime。
   */
  getDate(dateString, formatType = typeDateTime) {
    if (!dateString || typeof dateString !== 'string') {
      return dateString;
    }

    let ua = navigator.userAgent.toLowerCase();
    //苹果系统需要转换时间格式
    if (ua.match(/(iphone|ipod|ipad);?/i)) {
      dateString = dateString.replace(/-/g, '/');
    }

    let result = null;
    if (formatType === typeDateTime) {
      result = new Date(dateString);
    }
    return result;
  },
  /**
   * 格式化日期
   * @param date 日期
   * @param formatType 格式化类型。默认值：见typeDateTime。
   */
  format(date, formatType = typeDateTime) {
    if (!Date.prototype.format) {
      Date.prototype.format = function (fmt) {
        let o = {
          'Q+': Math.floor((this.getMonth() + 3) / 3), //季度
          'M+': this.getMonth() + 1, //月份
          'D+': this.getDate(), //日
          'H+': this.getHours(), //小时
          'm+': this.getMinutes(), //分
          's+': this.getSeconds(), //秒
          S: this.getMilliseconds() //毫秒
        };
        if (/(Y+)/.test(fmt)) {
          fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
        }
        for (let k in o) {
          if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
          }
        }
        return fmt;
      };
    }
    if (!date || !date.format) {
      return date;
    }
    return date.format(formatType);
  },
  /**
   * 计算时间间隔
   * @param start 开始时间
   * @param end 结束时间
   * @param formatType 开始时间和结束时间的格式。默认值：见typeDateTime。
   * @param resultType 返回结果的格式，默认：'m'，代表分钟
   * @param system 系统类型：0是PC浏览器，1是android浏览器，2是ios浏览器，3是微信环境。默认值：0。
   */
  interval({start, end, formatType = typeDateTime, resultType = 'm', system = 0}) {
    if (formatType === typeDateTime) {
      //苹果系统时间格式为yyyy/MM/dd HH:mm:ss或yyyy-MM-ddTHH:mm:ss
      if (system === 2) {
        start = start.replace(/-/g, '/');
        end = end.replace(/-/g, '/');
      }
      start = new Date(start);
      end = new Date(end);
    } else {
      return;
    }

    let result = end.getTime() - start.getTime();
    if (resultType === 's') {
      return Math.round(result / 1000);
    } else if (resultType === 'm') {
      return Math.round(result / (1000 * 60));
    } else if (resultType === 'h') {
      return Math.round(result / (1000 * 60 * 60));
    } else if (resultType === 'd') {
      return Math.round(result / (1000 * 60 * 60 * 24));
    }
  }
};
